#Boa:Frame:HistorialCliente

import wx
import wx.stc
import wx.richtext
import wx.grid
import consultasBD
import utiles

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)
GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)

def create(parent,idcliente=""):
    return HistorialCliente(parent,idcliente)

[wxID_HISTORIALCLIENTE, wxID_HISTORIALCLIENTEBUTTON1, 
 wxID_HISTORIALCLIENTEBUTTON2, wxID_HISTORIALCLIENTEBUTTON3, 
 wxID_HISTORIALCLIENTEBUTTON4, wxID_HISTORIALCLIENTEBUTTON5, 
 wxID_HISTORIALCLIENTEBUTTON6, wxID_HISTORIALCLIENTEGRID1, 
 wxID_HISTORIALCLIENTEGRID2, wxID_HISTORIALCLIENTEGRID3, 
 wxID_HISTORIALCLIENTENOTEBOOK1, wxID_HISTORIALCLIENTEPANEL1, 
 wxID_HISTORIALCLIENTEPANEL2, wxID_HISTORIALCLIENTEPANEL3, 
 wxID_HISTORIALCLIENTEPANEL4, wxID_HISTORIALCLIENTEPANEL5, 
 wxID_HISTORIALCLIENTESTATICTEXT1, wxID_HISTORIALCLIENTESTATICTEXT10, 
 wxID_HISTORIALCLIENTESTATICTEXT11, wxID_HISTORIALCLIENTESTATICTEXT12, 
 wxID_HISTORIALCLIENTESTATICTEXT13, wxID_HISTORIALCLIENTESTATICTEXT14, 
 wxID_HISTORIALCLIENTESTATICTEXT15, wxID_HISTORIALCLIENTESTATICTEXT2, 
 wxID_HISTORIALCLIENTESTATICTEXT3, wxID_HISTORIALCLIENTESTATICTEXT4, 
 wxID_HISTORIALCLIENTESTATICTEXT5, wxID_HISTORIALCLIENTESTATICTEXT6, 
 wxID_HISTORIALCLIENTESTATICTEXT7, wxID_HISTORIALCLIENTESTATICTEXT8, 
 wxID_HISTORIALCLIENTESTATICTEXT9, wxID_HISTORIALCLIENTESTYLEDTEXTCTRL1, 
 wxID_HISTORIALCLIENTESTYLEDTEXTCTRL2, wxID_HISTORIALCLIENTETEXTCTRL1, 
 wxID_HISTORIALCLIENTETEXTCTRL10, wxID_HISTORIALCLIENTETEXTCTRL11, 
 wxID_HISTORIALCLIENTETEXTCTRL13, wxID_HISTORIALCLIENTETEXTCTRL2, 
 wxID_HISTORIALCLIENTETEXTCTRL3, wxID_HISTORIALCLIENTETEXTCTRL4, 
 wxID_HISTORIALCLIENTETEXTCTRL5, wxID_HISTORIALCLIENTETEXTCTRL6, 
 wxID_HISTORIALCLIENTETEXTCTRL7, wxID_HISTORIALCLIENTETEXTCTRL8, 
 wxID_HISTORIALCLIENTETEXTCTRL9, 
] = [wx.NewId() for _init_ctrls in range(45)]

class HistorialCliente(wx.Frame):
    def _init_coll_notebook1_Pages(self, parent):
        # generated method, don't edit

        parent.AddPage(imageId=-1, page=self.panel5, select=True,
              text='Datos Personales')
        parent.AddPage(imageId=-1, page=self.panel2, select=False,
              text='Compras')
        parent.AddPage(imageId=-1, page=self.panel3, select=False,
              text='Estadisticas')
        parent.AddPage(imageId=-1, page=self.panel4, select=False,
              text='Comunicaciones')

    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_HISTORIALCLIENTE,
              name='HistorialCliente', parent=prnt, pos=wx.Point(591, 125),
              size=wx.Size(935, 483), style=wx.DEFAULT_FRAME_STYLE,
              title='Historial Cliente')
        self.SetClientSize(wx.Size(927, 456))

        self.panel1 = wx.Panel(id=wxID_HISTORIALCLIENTEPANEL1, name='panel1',
              parent=self, pos=wx.Point(0, 0), size=wx.Size(927, 456),
              style=wx.TAB_TRAVERSAL)

        self.staticText1 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT1,
              label='Nro.de Cliente', name='staticText1', parent=self.panel1,
              pos=wx.Point(8, 8), size=wx.Size(69, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT2,
              label='Nombre', name='staticText2', parent=self.panel1,
              pos=wx.Point(80, 8), size=wx.Size(37, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL1,
              name='textCtrl1', parent=self.panel1, pos=wx.Point(8, 24),
              size=wx.Size(72, 21), style=0, value='')

        self.textCtrl2 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL2,
              name='textCtrl2', parent=self.panel1, pos=wx.Point(80, 24),
              size=wx.Size(200, 21), style=0, value='')
        self.textCtrl2.SetEditable(True)

        self.button1 = wx.Button(id=wxID_HISTORIALCLIENTEBUTTON1,
              label='Buscar', name='button1', parent=self.panel1,
              pos=wx.Point(288, 24), size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscar,
              id=wxID_HISTORIALCLIENTEBUTTON1)

        self.textCtrl3 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL3,
              name='textCtrl3', parent=self.panel1, pos=wx.Point(376, 24),
              size=wx.Size(168, 21), style=0, value='')
        self.textCtrl3.SetEditable(False)

        self.textCtrl4 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL4,
              name='textCtrl4', parent=self.panel1, pos=wx.Point(544, 24),
              size=wx.Size(168, 21), style=0, value='')
        self.textCtrl4.SetEditable(False)

        self.staticText8 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT8,
              label='Telefono', name='staticText8', parent=self.panel1,
              pos=wx.Point(376, 8), size=wx.Size(42, 13), style=0)

        self.staticText9 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT9,
              label='e-mail', name='staticText9', parent=self.panel1,
              pos=wx.Point(544, 8), size=wx.Size(28, 13), style=0)

        self.notebook1 = wx.Notebook(id=wxID_HISTORIALCLIENTENOTEBOOK1,
              name='notebook1', parent=self.panel1, pos=wx.Point(8, 56),
              size=wx.Size(912, 392), style=0)

        self.panel2 = wx.Panel(id=wxID_HISTORIALCLIENTEPANEL2, name='panel2',
              parent=self.notebook1, pos=wx.Point(0, 0), size=wx.Size(904, 366),
              style=wx.TAB_TRAVERSAL)

        self.panel3 = wx.Panel(id=wxID_HISTORIALCLIENTEPANEL3, name='panel3',
              parent=self.notebook1, pos=wx.Point(0, 0), size=wx.Size(904, 366),
              style=wx.TAB_TRAVERSAL)

        self.panel4 = wx.Panel(id=wxID_HISTORIALCLIENTEPANEL4, name='panel4',
              parent=self.notebook1, pos=wx.Point(0, 0), size=wx.Size(904, 366),
              style=wx.TAB_TRAVERSAL)

        self.panel5 = wx.Panel(id=wxID_HISTORIALCLIENTEPANEL5, name='panel5',
              parent=self.notebook1, pos=wx.Point(0, 0), size=wx.Size(904, 366),
              style=wx.TAB_TRAVERSAL)
        self.panel5.SetLabel('panel5')

        self.button2 = wx.Button(id=wxID_HISTORIALCLIENTEBUTTON2,
              label='Limpiar', name='button2', parent=self.panel1,
              pos=wx.Point(736, 24), size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnLimpiar,
              id=wxID_HISTORIALCLIENTEBUTTON2)

        self.button3 = wx.Button(id=wxID_HISTORIALCLIENTEBUTTON3, label='Salir',
              name='button3', parent=self.panel1, pos=wx.Point(824, 24),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnSalir,
              id=wxID_HISTORIALCLIENTEBUTTON3)

        self.staticText3 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT3,
              label='Direccion', name='staticText3', parent=self.panel5,
              pos=wx.Point(16, 8), size=wx.Size(43, 13), style=0)

        self.textCtrl5 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL5,
              name='textCtrl5', parent=self.panel5, pos=wx.Point(16, 24),
              size=wx.Size(248, 21), style=0, value='')
        self.textCtrl5.SetEditable(False)

        self.staticText4 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT4,
              label='Localidad / Provincia', name='staticText4',
              parent=self.panel5, pos=wx.Point(16, 56), size=wx.Size(97, 13),
              style=0)

        self.textCtrl6 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL6,
              name='textCtrl6', parent=self.panel5, pos=wx.Point(16, 72),
              size=wx.Size(248, 21), style=0, value='')
        self.textCtrl6.SetEditable(False)

        self.staticText5 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT5,
              label='C.P.', name='staticText5', parent=self.panel5,
              pos=wx.Point(264, 56), size=wx.Size(21, 13), style=0)

        self.textCtrl7 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL7,
              name='textCtrl7', parent=self.panel5, pos=wx.Point(264, 72),
              size=wx.Size(72, 21), style=0, value='')
        self.textCtrl7.SetEditable(False)

        self.staticText6 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT6,
              label='Cumple', name='staticText6', parent=self.panel5,
              pos=wx.Point(16, 104), size=wx.Size(35, 13), style=0)

        self.textCtrl8 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL8,
              name='textCtrl8', parent=self.panel5, pos=wx.Point(16, 120),
              size=wx.Size(56, 21), style=0, value='')
        self.textCtrl8.SetEditable(False)

        self.staticText7 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT7,
              label='Situacion Fiscal', name='staticText7', parent=self.panel5,
              pos=wx.Point(88, 104), size=wx.Size(72, 13), style=0)

        self.textCtrl9 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL9,
              name='textCtrl9', parent=self.panel5, pos=wx.Point(88, 120),
              size=wx.Size(96, 21), style=0, value='')
        self.textCtrl9.SetEditable(False)

        self.staticText10 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT10,
              label='Tipo', name='staticText10', parent=self.panel5,
              pos=wx.Point(192, 104), size=wx.Size(20, 13), style=0)

        self.textCtrl10 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL10,
              name='textCtrl10', parent=self.panel5, pos=wx.Point(192, 120),
              size=wx.Size(48, 21), style=0, value='')
        self.textCtrl10.SetEditable(False)

        self.staticText11 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT11,
              label='Nro. Documento', name='staticText11', parent=self.panel5,
              pos=wx.Point(240, 104), size=wx.Size(78, 13), style=0)

        self.textCtrl11 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL11,
              name='textCtrl11', parent=self.panel5, pos=wx.Point(240, 120),
              size=wx.Size(96, 21), style=0, value='')
        self.textCtrl11.SetEditable(False)

        self.staticText12 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT12,
              label='Observaciones', name='staticText12', parent=self.panel5,
              pos=wx.Point(16, 152), size=wx.Size(71, 13), style=0)

        self.staticText13 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT13,
              label='Fecha Alta', name='staticText13', parent=self.panel5,
              pos=wx.Point(264, 8), size=wx.Size(51, 13), style=0)

        self.textCtrl13 = wx.TextCtrl(id=wxID_HISTORIALCLIENTETEXTCTRL13,
              name='textCtrl13', parent=self.panel5, pos=wx.Point(264, 24),
              size=wx.Size(72, 21), style=0, value='')
        self.textCtrl13.SetEditable(False)

        self.grid1 = wx.grid.Grid(id=wxID_HISTORIALCLIENTEGRID1, name='grid1',
              parent=self.panel5, pos=wx.Point(368, 72), size=wx.Size(528, 280),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnDobleClick)

        self.staticText14 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT14,
              label='Comunicaciones', name='staticText14', parent=self.panel5,
              pos=wx.Point(368, 56), size=wx.Size(76, 13), style=0)

        self.button4 = wx.Button(id=wxID_HISTORIALCLIENTEBUTTON4,
              label='Nuevas Comunicaciones', name='button4', parent=self.panel5,
              pos=wx.Point(368, 24), size=wx.Size(144, 23), style=0)
        self.button4.Enable(False)
        self.button4.Bind(wx.EVT_BUTTON, self.OnComunica,
              id=wxID_HISTORIALCLIENTEBUTTON4)

        self.button5 = wx.Button(id=wxID_HISTORIALCLIENTEBUTTON5,
              label='Modificar', name='button5', parent=self.panel5,
              pos=wx.Point(16, 328), size=wx.Size(75, 23), style=0)
        self.button5.Enable(False)
        self.button5.Bind(wx.EVT_BUTTON, self.OnModificar,
              id=wxID_HISTORIALCLIENTEBUTTON5)

        self.grid2 = wx.grid.Grid(id=wxID_HISTORIALCLIENTEGRID2, name='grid2',
              parent=self.panel2, pos=wx.Point(8, 16), size=wx.Size(888, 336),
              style=0)

        self.styledTextCtrl1 = wx.stc.StyledTextCtrl(id=wxID_HISTORIALCLIENTESTYLEDTEXTCTRL1,
              name='styledTextCtrl1', parent=self.panel5, pos=wx.Point(16, 168),
              size=wx.Size(320, 152), style=0)
        self.styledTextCtrl1.SetScrollWidth(100)
        self.styledTextCtrl1.SetCaretPeriod(500)
        self.styledTextCtrl1.SetCaretLineBackAlpha(256)
        self.styledTextCtrl1.Enable(False)

        self.staticText15 = wx.StaticText(id=wxID_HISTORIALCLIENTESTATICTEXT15,
              label='Proveedores mas llevados / Grupos y talles',
              name='staticText15', parent=self.panel3, pos=wx.Point(16, 8),
              size=wx.Size(206, 13), style=0)

        self.grid3 = wx.grid.Grid(id=wxID_HISTORIALCLIENTEGRID3, name='grid3',
              parent=self.panel3, pos=wx.Point(16, 24), size=wx.Size(880, 336),
              style=0)

        self.styledTextCtrl2 = wx.stc.StyledTextCtrl(id=wxID_HISTORIALCLIENTESTYLEDTEXTCTRL2,
              name='styledTextCtrl2', parent=self.panel4, pos=wx.Point(8, 8),
              size=wx.Size(888, 352), style=0)
        self.styledTextCtrl2.SetLabel('')
        self.styledTextCtrl2.SetReadOnly(False)
        self.styledTextCtrl2.SetScrollWidth(100)
        self.styledTextCtrl2.Enable(True)

        self.button6 = wx.Button(id=wxID_HISTORIALCLIENTEBUTTON6,
              label='Refrescar', name='button6', parent=self.panel5,
              pos=wx.Point(808, 24), size=wx.Size(75, 23), style=0)
        self.button6.Bind(wx.EVT_BUTTON, self.OnRefrescar,
              id=wxID_HISTORIALCLIENTEBUTTON6)

        self._init_coll_notebook1_Pages(self.notebook1)

    def __init__(self, parent, idcliente):
        self._init_ctrls(parent)
        self.crearGrilla()
        self.notebook1.SetSelection(0)
        if idcliente<>"":
            self.textCtrl1.SetLabel(idcliente)
            self.OnBuscar(None)
        self.textCtrl1.SetFocus()

    def OnBuscar(self, event):
        if self.textCtrl1.GetLabel()=="" and self.textCtrl2.GetLabel()=="":
            utiles.mensaje(None,"Debe introducir numero de cliente o nombre")
            self.textCtrl1.SetFocus()
            return
        if len(self.textCtrl1.GetLabel())>0:
            consultaSQL = "SELECT * FROM cliente WHERE idcliente='"+self.textCtrl1.GetLabel()+"'"
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado == () or resultado == None:
                utiles.mensaje(None,"Numero de Cliente no encontrado")
                self.textCtrl1.SetLabel("")
                self.textCtrl2.SetLabel("")
                self.textCtrl1.SetFocus()
                return
            self.cargaDatos(resultado[0])
            self.textCtrl1.SetEditable(False)
            self.textCtrl2.SetEditable(False)
            self.button1.Enable(False)
            self.button5.Enable(True)
            self.button4.Enable(True)
            self.button2.SetFocus()
            return

        r1 = "SELECT * FROM cliente "
        r2 = "WHERE nombre LIKE '%"+self.textCtrl2.GetLabel()+"%' ORDER BY nombre"
        consultaSQL = r1 + r2
        resultado = consultasBD.ordenCrudaDict(consultaSQL)
        if resultado == () or resultado == None or len(resultado)==0:
            utiles.mensaje(None,"No se encontraron clientes con los datos ingresados")
            self.textCtrl1.SetLabel("")
            self.textCtrl2.SetLabel("")
            self.textCtrl1.SetFocus()
            return
        if len(resultado)>1:
            import BuscarClientes
            dlg = BuscarClientes.Dialog1(self,resultado)
            try:
                dlg.ShowModal()
            finally:
                if dlg.seleccion == "":
                    return
                clientes = dlg.seleccion
                dlg.Destroy()
        else:
            clientes = resultado[0]
        self.cargaDatos(clientes)
        self.textCtrl1.SetEditable(False)
        self.textCtrl2.SetEditable(False)
        self.button1.Enable(False)
        self.button4.Enable(True)
        self.button5.Enable(True)
        self.button2.SetFocus()
        return

    def OnSalir(self, event):
        self.Close()
        
    def OnLimpiar(self, event):
        self.button1.Enable(True)
        self.button4.Enable(False)
        self.button5.Enable(False)
        self.textCtrl1.SetLabel("")
        self.textCtrl2.SetLabel("")
        self.textCtrl1.SetEditable(True)
        self.textCtrl2.SetEditable(True)
        self.textCtrl3.SetLabel("")
        self.textCtrl4.SetLabel("")
        self.textCtrl5.SetLabel("")
        self.textCtrl6.SetLabel("")
        self.textCtrl7.SetLabel("")
        self.textCtrl8.SetLabel("")
        self.textCtrl9.SetLabel("")
        self.textCtrl10.SetLabel("")
        self.textCtrl11.SetLabel("")
        self.textCtrl13.SetLabel("")
        self.styledTextCtrl1.SetText("")
        self.grid1.ClearGrid()
        for fila in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        self.grid2.ClearGrid()
        for fila in xrange(self.grid2.GetNumberRows()):
            self.grid2.DeleteRows()
        self.grid2.AppendRows()
        self.grid3.ClearGrid()
        for fila in xrange(self.grid3.GetNumberRows()):
            self.grid3.DeleteRows()
        self.grid3.AppendRows()
        self.styledTextCtrl2.SetText("")
        self.notebook1.SetSelection(0)
        self.textCtrl1.SetFocus()

    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)
        for y in xrange(self.grid2.GetNumberCols()):
            self.grid2.AutoSizeColumn(y,True)
        for y in xrange(self.grid3.GetNumberCols()):
            self.grid3.AutoSizeColumn(y,True)

    def crearGrilla(self):
        columnas = [' ',' ',' ',' ']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)

        self.grid1.EnableEditing(False)
        self.grid1.Refresh()

        columnas = ['Fecha','Suc','Ticket/\nPTC','NroDoc/\nCodSussan','T','Descripcion','Talle','Color','Cant','Precio','Subtotal','Desc %','Total']
        self.grid2.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid2.SetColLabelValue(i, col)

        self.grid2.EnableEditing(False)
        self.grid2.Refresh()

        columnas = ['Proveedor','Items','Monto','_','Proveedor','Items','Monto','_','Grupo','Talle','Items','Monto']
        self.grid3.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid3.SetColLabelValue(i, col)

        self.grid3.EnableEditing(False)
        self.grid3.Refresh()

        self.ajustarAnchoColumnas()

    def crearTabla(self):
        sql = "DROP TABLE IF EXISTS clienteventas"
        consultasBD.ordenCruda(sql)
        r01 = "CREATE TABLE clienteventas ("
        r02 = "`id` INT NOT NULL AUTO_INCREMENT ,"
        r03 = "`idticket` VARCHAR( 15 ) NOT NULL ,"
        r04 = "`nrofactura` VARCHAR( 15 ) NOT NULL ,"
        r05 = "`fecha` DATETIME NOT NULL ,"
        r06 = "`idcliente` VARCHAR( 8 ) NOT NULL ,"
        r07 = "`idformaticket` INT( 4 ) NOT NULL ,"
        r08 = "`sucursal` VARCHAR( 4 ) NOT NULL ,"
        r09 = "`usuario` VARCHAR( 15 ) NOT NULL ,"
        r10 = "`descfactura` DECIMAL( 5, 2 ) NOT NULL ,"
        r11 = "`totalsiniva` DECIMAL( 10, 2 ) NOT NULL ,"
        r12 = "`iva` DECIMAL( 10, 2 ) NOT NULL ,"
        r13 = "`totalfactura` DECIMAL( 10, 2 ) NOT NULL ,"
        r14 = "`ptc` VARCHAR( 18 ) NOT NULL ,"
        r15 = "`codsussan` VARCHAR( 18 ) NOT NULL ,"
        r16 = "`proveedor` VARCHAR( 10 ) NOT NULL ,"
        r17 = "`descri` VARCHAR( 100 ) NOT NULL ,"
        r18 = "`talle` VARCHAR( 2 ) NOT NULL ,"
        r19 = "`color` VARCHAR( 50 ) NOT NULL ,"
        r20 = "`grupo` VARCHAR( 50 ) NOT NULL ,"
        r21 = "`cantidad` INT( 4 ) NOT NULL ,"
        r22 = "`preciolista` DECIMAL( 10, 2 ) NOT NULL ,"
        r23 = "`descitem` DECIMAL( 5, 2 ) NOT NULL ,"
        r24 = "`preciofinal` DECIMAL( 10, 2 ) NOT NULL ,"
        r25 = "PRIMARY KEY (  `id` )"
        r26 = ") ENGINE = INNODB"
        sql = r01+r02+r03+r04+r05+r06+r07+r08+r09+r10+r11+r12
        sql+= r13+r14+r15+r16+r17+r18+r19+r20+r21+r22+r23+r24+r25+r26
        print "Creando tabla auxiliar"
        consultasBD.ordenCruda(sql)

    def buscarProducto(self,codsussan=""):
        print "Buscando datos del Producto.",
        if codsussan=="": return ()
        consultaSQL = "SELECT * FROM productos WHERE codsussan='"+codsussan+"'"
        resultados = consultasBD.ordenCrudaDict(consultaSQL)
        if resultados == () or resultados == None:
            return ()
        return resultados[0]

    def buscarProveedor(self,idproveedor=""):
        print "Buscando nombre del proveedor.",
        if idproveedor=="":
            return ""
        consultaSQL = "SELECT nombre FROM proveedor WHERE idproveedor='"+idproveedor+"'"
        resultados = consultasBD.ordenCrudaDict(consultaSQL)
        if resultados == () or resultados == None:
            return ""
        return resultados[0]["nombre"]

    def buscarPTC(self,codsussan="",talle="",color=""):
        print "Buscando PTC.",
        if codsussan == "":return ""
        if color == "":return ""
        if talle == "":return ""
        r1 = "SELECT id FROM producto_talle_color \n"
        r2 = "WHERE codsussan='"+codsussan+"' AND \n"
        r3 = "      talle='"+talle+"' AND\n"
        r4 = "      color='"+color+"' "
        consultaSQL = r1+r2+r3+r4
        resultados = consultasBD.ordenCrudaDict(consultaSQL)
        if resultados == () or resultados == None:
            return ""
        return resultados[0][0]["id"]

    def buscarCodSussan(self,ptc=""):
        print "Buscando codsussan, talle y color.",
        if ptc=="":
            return "","",""
        consultaSQL = "SELECT codsussan,talle,color FROM producto_talle_color WHERE id='"+ptc+"'"
        resultados = consultasBD.ordenCrudaDict(consultaSQL)
        if resultados == () or resultados == None:
            return "","",""
        return resultados[0]["codsussan"],resultados[0]["talle"],resultados[0]["color"]
    
    def buscarColor(self,color=""):
        if color=="":
            return color+" / "
        consultaSQL = "SELECT nombre FROM colores WHERE idcolor='"+color+"'"
        resultados = consultasBD.ordenCrudaDict(consultaSQL)
        if resultados == () or resultados == None:
            return color+" / "
        return color+" / "+resultados[0]["nombre"]

    def buscarVendedora(self,usuario=""):
        if usuario=="":
            return ""
        consultaSQL = "SELECT nombre FROM vendedoras WHERE idvendedora='"+usuario+"'"
        resultados = consultasBD.ordenCrudaDict(consultaSQL)
        if resultados == () or resultados == None:
            return ""
        return resultados[0]["nombre"]

    def buscarVentas(self,idcliente,sucursal):
        r01 = "SELECT vt.idticket,v.nrofactura,v.fecha,v.idcliente, \n"
        r02 = "       v.idformaticket,v.sucursal,v.usuario,v.descuento as descfactura, \n"
        r03 = "       v.totalsiniva,v.iva,v.totalfactura,vt.ptc,pt.codsussan, \n"
        r04 = "       pd.proveedor,vt.descri,vt.talle,vt.color,gr.nombregrupo, \n"
        r05 = "       vt.cantidad,vt.preciolista,vt.descuento as descitem,vt.preciofinal \n"
        r06 = "FROM ventas v, ventastieneproductos vt, "
        r07 = "     producto_talle_color pt, productos pd, grupos as gr \n"
        r08 = "WHERE v.idventa=vt.idticket AND vt.ptc=pt.id AND gr.idgrupo=pd.grupo AND \n"
        r09 = "      pd.codsussan=pt.codsussan AND v.idcliente='"+idcliente+"' \n"
        sql = r01+r02+r03+r04+r05+r06+r07+r08+r09
        resultados, conecta = consultasBD.ordenCrudaDictRemota2(sql,sucursal)
        if resultados == () or resultados == None:
            return (), True
        return resultados, conecta

    def datosPersonales(self,datosCliente):
        #llena ficha principal
        self.textCtrl1.SetLabel(datosCliente["idcliente"])
        self.textCtrl2.SetLabel(datosCliente["nombre"])
        self.textCtrl3.SetLabel(datosCliente["telefono"])
        self.textCtrl4.SetLabel(datosCliente["email"])
        self.textCtrl5.SetLabel(datosCliente["direccion"])
        self.textCtrl6.SetLabel(datosCliente["localidad"]+" / "+datosCliente["provincia"])
        self.textCtrl7.SetLabel(datosCliente["cp"])
        self.textCtrl8.SetLabel(datosCliente["cumple"])
        self.textCtrl9.SetLabel(datosCliente["situacionfiscal"])
        self.textCtrl10.SetLabel(datosCliente["tipodoc"])
        self.textCtrl11.SetLabel(datosCliente["nrodoc"])
        fechaalta = utiles.invertirFecha2(str(datosCliente["fechaalta"]))
        self.textCtrl13.SetLabel(fechaalta)
        self.styledTextCtrl1.SetText(datosCliente["observaciones"])

    def datosVentas(self,idcliente):
        self.crearTabla()
        for sucursal in xrange(4):
            ventacliente,conecta=self.buscarVentas(idcliente,sucursal)
            if not conecta or ventacliente == () \
               or ventacliente == None or len(ventacliente)==0:
                continue
            #arma registro para grabar en tabla auxiliar
            for ventas in ventacliente:
                r01 = "clienteventas(idticket,nrofactura,fecha,idcliente,"
                r02 = "idformaticket,sucursal,usuario,descfactura,totalsiniva,"
                r03 = "iva,totalfactura,ptc,codsussan,proveedor,descri,talle,color,"
                r04 = "grupo,cantidad,preciolista,descitem,preciofinal)"
                campos = r01+r02+r03+r04
                r01 = "('"+str(ventas["idticket"])+"','"+str(ventas["nrofactura"])+"','"
                r02 = str(ventas["fecha"])
                r03 = "','"+ventas["idcliente"]+"','"+str(ventas["idformaticket"])+"','"+ventas["sucursal"]+"','"
                r04 = ventas["usuario"]+"','"+str(ventas["descfactura"])+"','"+str(ventas["totalsiniva"])+"','"
                r05 = str(ventas["iva"])+"','"+str(ventas["totalfactura"])+"','"+ventas["ptc"]+"','"
                r06 = ventas["codsussan"]+"','"+ventas["proveedor"]+"','"+ventas["descri"]+"','"
                r07 = ventas["talle"]+"','"+ventas["color"]+"','"+str(ventas["nombregrupo"])+"','"
                r08 = str(ventas["cantidad"])+"','"+str(ventas["preciolista"])+"','"
                r09 = str(ventas["descitem"])+"','"+str(ventas["preciofinal"])+"')"
                valores = r01+r02+r03+r04+r05+r06+r07+r08+r09
                id = consultasBD.executaInsertSQL(self,campos,valores)
        
    def cargarGrillaVentas(self):

        def renglonEncabezado(fila,renglon):
            #Fecha,Suc,Ticket/P.T.C.,Nro.Doc./Cod.Sussan,Tipo,Descripcion,
            #0     1   2             3                   4    5
            #Talle,Color,Cant,Precio,Subtotal,Desc %,Total
            #6     7     8    9      10       11     12
            self.grid2.SetCellValue(fila,0,utiles.invertirFecha2(str(renglon["fecha"])[:10]))
            self.grid2.SetCellAlignment(fila,0,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,1,str(renglon["sucursal"]))
            self.grid2.SetCellAlignment(fila,1,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,2,str(renglon["idticket"]))
            self.grid2.SetCellValue(fila,3,str(renglon["nrofactura"]))
            self.grid2.SetCellAlignment(fila,3,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,4,str(renglon["idformaticket"]))
            self.grid2.SetCellAlignment(fila,4,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE)
            for col in xrange(self.grid2.GetNumberCols()):
                self.grid2.SetCellBackgroundColour(fila,col,GRIS)

        def renglonDetalle(fila,renglon):
            #Fecha,Suc,Ticket/P.T.C.,Nro.Doc./Cod.Sussan,Tipo,Descripcion,
            #0     1   2             3                   4    5
            #Talle,Color,Cant,Precio,Subtotal,Desc %,Total
            #6     7     8    9      10       11     12
            self.grid2.SetCellValue(fila,2,str(renglon["ptc"]))
            self.grid2.SetCellAlignment(fila,2,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,3,str(renglon["codsussan"]))
            self.grid2.SetCellAlignment(fila,3,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,5,str(renglon["descri"])[:30].swapcase())
            self.grid2.SetCellValue(fila,6,str(renglon["talle"]))
            self.grid2.SetCellAlignment(fila,6,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,7,self.buscarColor(str(renglon["color"]))[:13])
            self.grid2.SetCellValue(fila,8,str(renglon["cantidad"]))
            self.grid2.SetCellAlignment(fila,8,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,9,str(renglon["preciolista"]))
            self.grid2.SetCellAlignment(fila,9,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            subtotal = renglon["preciolista"]*renglon["cantidad"]
            self.grid2.SetCellValue(fila,10,str(subtotal))
            self.grid2.SetCellAlignment(fila,10,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,11,str(renglon["descitem"]))
            self.grid2.SetCellAlignment(fila,11,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,12,str(renglon["preciofinal"]))
            self.grid2.SetCellAlignment(fila,12,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)

        def renglonPie(fila,renglon):
            #Fecha,Suc,Ticket/P.T.C.,Nro.Doc./Cod.Sussan,Tipo,Descripcion,
            #0     1   2             3                   4    5
            #Talle,Color,Cant,Precio,Subtotal,Desc %,Total
            #6     7     8    9      10       11     12
            colortexto = GRIS
            self.grid2.SetCellValue(fila,2,"Vend:")
            self.grid2.SetCellBackgroundColour(fila,2,colortexto)
            self.grid2.SetCellAlignment(fila,2,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,3,self.buscarVendedora(str(renglon["usuario"])))
            self.grid2.SetCellBackgroundColour(fila,3,colortexto)
            self.grid2.SetCellBackgroundColour(fila,4,colortexto)
            self.grid2.SetCellValue(fila,5,"Subtotal / IVA / Desc.% / TOTAL")
            self.grid2.SetCellBackgroundColour(fila,5,colortexto)
            self.grid2.SetCellBackgroundColour(fila,6,colortexto)
            self.grid2.SetCellBackgroundColour(fila,7,colortexto)
            self.grid2.SetCellBackgroundColour(fila,8,colortexto)
            self.grid2.SetCellValue(fila,9,str(renglon["totalsiniva"]))
            self.grid2.SetCellAlignment(fila,9,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellBackgroundColour(fila,9,colortexto)
            self.grid2.SetCellValue(fila,10,str(renglon["iva"]))
            self.grid2.SetCellAlignment(fila,10,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellBackgroundColour(fila,10,colortexto)
            self.grid2.SetCellValue(fila,11,str(renglon["descfactura"]))
            self.grid2.SetCellAlignment(fila,11,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellBackgroundColour(fila,11,colortexto)
            self.grid2.SetCellValue(fila,12,str(renglon["totalfactura"]))
            self.grid2.SetCellAlignment(fila,12,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid2.SetCellBackgroundColour(fila,12,colortexto)

        sql = "SELECT * FROM clienteventas WHERE 1 ORDER BY fecha DESC,idticket,nrofactura"
        resultados = consultasBD.ordenCrudaDict(sql)
        if resultados == () or resultados == None or len(resultados)==0:
            print "No hay datos guardados en archivo temporal"
            return
        subtotal = 0
        total = 0
        #Fecha,Suc,Ticket,NroDoc,Tipo,Vendedora,PTC,CodSussan
        #0     1   2      3      4    5         6   7
        #Desc,Talle,Color,Cant,Precio,Subtotal,Desc %,Total
        #8    9     10    11   12     13       14     15    
        nrofacturaanterior = resultados[0]["nrofactura"]
        itemanterior = resultados[0]
        renglonEncabezado(0,itemanterior)
        fila = 0
        for itemactual in resultados:
            nrofacturaactual = itemactual["nrofactura"]
            fila+=1
            self.grid2.AppendRows()
            if nrofacturaactual == nrofacturaanterior:
                renglonDetalle(fila,itemactual)
                nrofacturaanterior = nrofacturaactual
                itemanterior = itemactual
            else:
                renglonPie(fila,itemanterior)
                fila+=2
                self.grid2.AppendRows()
                self.grid2.AppendRows()
                renglonEncabezado(fila,itemactual)
                fila+=1
                self.grid2.AppendRows()
                renglonDetalle(fila,itemactual)
                nrofacturaanterior = nrofacturaactual
                itemanterior = itemactual
        fila+=1
        self.grid2.AppendRows()
        renglonPie(fila,itemanterior)

        self.ajustarAnchoColumnas()
        print "Grilla venta cargada"

    def cargarProductos(self):
        #por pesos $
        r01 = "SELECT p.nombre,sum(cv.cantidad) as items,sum(cv.preciofinal) as monto "
        r02 = "FROM clienteventas as cv,proveedor as p "
        r03 = "WHERE cv.proveedor=p.idproveedor "
        r04 = "GROUP BY cv.proveedor ORDER BY monto DESC "
        sql = r01+r02+r03+r04
        resultados = consultasBD.ordenCrudaDict(sql)
        if resultados == () or resultados == None or len(resultados)==0:
            print "No hay datos guardados en archivo temporal"
            return
        for fila,item in enumerate(resultados):
            self.grid3.SetCellValue(fila,0,item["nombre"][:20])
            self.grid3.SetCellValue(fila,1,str(item["items"]))
            self.grid3.SetCellAlignment(fila,1,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid3.SetCellValue(fila,2,str(item["monto"]))
            self.grid3.SetCellAlignment(fila,2,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid3.AppendRows()
        #por items
        r01 = "SELECT p.nombre,sum(cv.cantidad) as items,sum(cv.preciofinal) as monto "
        r02 = "FROM clienteventas as cv,proveedor as p "
        r03 = "WHERE cv.proveedor=p.idproveedor "
        r04 = "GROUP BY cv.proveedor ORDER BY items DESC "
        sql = r01+r02+r03+r04
        resultados = consultasBD.ordenCrudaDict(sql)
        if resultados == () or resultados == None or len(resultados)==0:
            print "No hay datos guardados en archivo temporal"
            return
        for fila,item in enumerate(resultados):
            self.grid3.SetCellValue(fila,4,item["nombre"][:20])
            self.grid3.SetCellValue(fila,5,str(item["items"]))
            self.grid3.SetCellAlignment(fila,5,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid3.SetCellValue(fila,6,str(item["monto"]))
            self.grid3.SetCellAlignment(fila,6,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            maximo = fila
        r01 = "SELECT grupo,talle,sum(cantidad) as items,sum(preciofinal) as monto "
        r02 = "FROM clienteventas WHERE 1 GROUP BY grupo,talle ORDER BY items DESC "
        sql = r01+r02
        resultados = consultasBD.ordenCrudaDict(sql)
        if resultados == () or resultados == None or len(resultados)==0:
            print "No hay datos guardados en archivo temporal"
            return
        fila = 0
        for item in resultados:
            self.grid3.SetCellValue(fila,8,item["grupo"][:20])
            self.grid3.SetCellValue(fila,9,str(item["talle"]))
            self.grid3.SetCellValue(fila,10,str(item["items"]))
            self.grid3.SetCellAlignment(fila,10,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid3.SetCellValue(fila,11,str(item["monto"]))
            self.grid3.SetCellAlignment(fila,11,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            fila+=1
            if fila>=maximo: self.grid3.AppendRows()

        self.ajustarAnchoColumnas()
        print "Grilla estadisticas cargada"

    def cargarHistorial(self):
        idcliente = self.textCtrl1.GetLabel()
        r1 = "SELECT fecha FROM clientehistorial "
        r2 = "WHERE idcliente = '"+idcliente+"' ORDER by fecha DESC "
        sql = r1+r2
        resultados = consultasBD.ordenCrudaDict(sql)
        fil = 0
        col = 0
        for item in resultados:
            fecha = utiles.invertirFecha2(str(item["fecha"])[:10])+" "
            fecha+= str(item["fecha"])[-8:]
            self.grid1.SetCellValue(fil,col,fecha)
            col+=1
            if col == 4:
                col = 0
                fil+= 1
                self.grid1.AppendRows()
        self.ajustarAnchoColumnas()
        print "Grilla comunicaciones cargada"
        
    def OnModificar(self, event):
        idcliente = self.textCtrl1.GetLabel()
        if idcliente == "":
            self.textCtrl1.SetFocus()
            return
        import ModificaClientes
        ventana = ModificaClientes.ModifClientes(None,idcliente)
        try:
            ventana.ShowModal()
        finally:
            ventana.Destroy()

    def OnComunica(self, event):
        idcliente = self.textCtrl1.GetLabel()
        nombre = self.textCtrl2.GetLabel()
        cumple = self.textCtrl8.GetLabel()
        telefono = self.textCtrl3.GetLabel()
        email = self.textCtrl4.GetLabel()
        localidad = self.textCtrl6.GetLabel()
        datosCliente = {"idcliente":idcliente,"nombre":nombre}
        datosCliente["cumple"]=cumple
        datosCliente["telefono"]=telefono
        datosCliente["email"]=email
        datosCliente["localidad"]=localidad

        activado = True
        lista = []
        import HistorialClienteComunica
        appBack = HistorialClienteComunica.create(None,datosCliente,activado,lista)
        appBack.Show()

    def refrescaGrillaHistorial(self):
        #recarga los datos del historial
        self.grid1.ClearGrid()
        for i in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        self.cargarHistorial()
        self.cargarComunicaciones()
    
    def cargaDatos(self,cliente):
        self.button1.SetLabel("Procesando")
        self.datosPersonales(cliente)
        self.datosVentas(cliente["idcliente"])
        self.cargarGrillaVentas()
        self.cargarProductos()
        self.cargarHistorial()
        self.cargarComunicaciones()
        
        self.button1.SetLabel("Buscar")
        self.button1.Enable(False)
        self.button4.Enable(True)
        self.button5.Enable(True)
        
    def OnDobleClick(self, event):
        fil = self.grid1.GetGridCursorRow()
        col = self.grid1.GetGridCursorCol()
        fecha = self.grid1.GetCellValue(fil,col)[:10]
        hora = self.grid1.GetCellValue(fil,col)[-8:]
        fecha = utiles.invertirFecha(fecha)
        fecha = fecha + " " + hora
        idcliente = self.textCtrl1.GetLabel()
        nombre = self.textCtrl2.GetLabel()
        telefono = self.textCtrl3.GetLabel()
        email = self.textCtrl4.GetLabel()
        localidad = self.textCtrl6.GetLabel()
        cumple = self.textCtrl8.GetLabel()
        datos = {"idcliente":idcliente,"nombre":nombre,"telefono":telefono}
        datos["email"]=email
        datos["localidad"]=localidad
        datos["cumple"]=cumple
        r1 = "SELECT * FROM clientehistorial "
        r2 = "WHERE fecha='"+fecha+"' AND idcliente='"+idcliente+"' "
        sql = r1+r2
        resultado = consultasBD.ordenCrudaDict(sql)
        if resultado == () or resultado == None or len(resultado)<>1:
            utiles.mensaje(None,"No se encontro informacion")
            self.button2.SetFocus()
            return
        item = resultado[0]
        lista = []
        lista.append(str(item["fecha"]))
        lista.append(item["horacomienzo"])
        lista.append(item["horafinaliza"])
        lista.append(item["duracion"])
        lista.append(item["resultado"])
        lista.append(item["texto"])
        lista.append(item["usuario"])
        
        activado = False
        import HistorialClienteComunica
        appBack = HistorialClienteComunica.create(None,datos,activado,lista)
        appBack.Show()
        return

    def OnRefrescar(self, event):
        self.refrescaGrillaHistorial()
        self.button4.SetFocus()
        
    def cargarComunicaciones(self):
        self.styledTextCtrl2.Clear()
        idcliente = self.textCtrl1.GetLabel()
        r1 = "SELECT * FROM clientehistorial "
        r2 = "WHERE idcliente = '"+idcliente+"' ORDER by fecha DESC "
        sql = r1+r2
        resultados = consultasBD.ordenCrudaDict(sql)
        texto = "COMUNICACIONES\n"
        texto+= "-"*200+"\n"
        for item in resultados:
            fecha = utiles.invertirFecha2(str(item["fecha"])[:10])+" "
            fecha+= str(item["fecha"])[-8:]
            texto+= "- FECHA / HORA: "+fecha+" \n"
            texto+= "- COMIENZO: "+item["horacomienzo"]+" "
            texto+= "FIN: "+item["horafinaliza"]+" "
            texto+= "DURACION: "+item["duracion"]+" \n"
            texto+= "- RESULTADO: "+item["resultado"]+"\n"
            texto+= "- USUARIO: "+item["usuario"]+"\n\n"
            texto+= "- OBSERVACIONES: \n"
            if item["texto"][:130]<>"":texto+= "  "+item["texto"][:130]+"\n"
            if item["texto"][130:260]<>"":texto+= "  "+item["texto"][130:260]+"\n"
            if item["texto"][260:390]<>"":texto+= "  "+item["texto"][260:390]+"\n"
            if item["texto"][390:]<>"":texto+= "  "+item["texto"][390:]+"\n"
            texto+= "-"*200+"\n"
        self.styledTextCtrl2.SetText(texto)
        print "Comunicaciones actualizadas"
